﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using csharp.rad.general;
using ComponentFactory.Krypton.Toolkit;

namespace csharp.rad.GOVhotel
{
    public partial class História : KryptonForm
    {
        Database myDBase;
        public static String Ação;
        int antApto, antBloco, antCama, qBlk, qApt, qCam, qRow, numApto, numBloco, numCama;
        string[] tabAções = {"nada", "faxina", "pós-saída", "atendimento",
            "dispensada", "limpeza", "reposição", "manutenção" };

        public História(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            if (Ação == "porCama")
            {
                this.Text = "Histórico por Camareira";
                Cameiras tabCameira = new Cameiras(myDBase);
                int dbRet = tabCameira.Lista();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: HistoLoadListCameira" + "\n" + tabCameira.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                for (int xx = 0; xx < tabCameira.Items.Count; xx++)
                {
                    string nomeCameira = tabCameira.Items[xx].Nome.Replace('_', ' ');
                    if (tabCameira.Items[xx].Tipo == "C" || tabCameira.Items[xx].Tipo == "M") vewCameira.Items.Add
                        (tabCameira.Items[xx].Código.ToString(), nomeCameira, 4);
                }
                listaHisto.Top = 12;
                listaHisto.Height = 535;
                janCameira.Location = new Point(9, 6); 
                janCameira.Visible = true; 
            }
            else if (Ação == "porApto")
            {
                this.Text = "Histórico por Apartamento";
                for (int blk = 1; blk < 6; blk++)
                {
                    vewBloco.Items.Add(blk.ToString(), blk.ToString(), 2);
                }
                for (int apt = 1; apt < 5; apt++)
                {
                    for (int blk = 1; blk < 9; blk++)
                    {
                        int numo = (blk * 100) + apt;
                        vewApto.Items.Add(numo.ToString(), numo.ToString(), 0);
                    }
                }
                janBloco.Visible = true; 
            }
            else       
            {
                this.Text = "Histórico - Pendentes";
                listaHisto.Rows.Clear();
                hstAção.Visible = false;
                hstCameira.Visible = false;
                listaHisto.Top = 12;
                listaHisto.Size = new Size (230, 535); 
                Tarefas tabTafa = new Tarefas(myDBase);
                int dbRet = tabTafa.ListaPend();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: HistoLoadListPend" + "\n" + tabTafa.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                for (int xx = 0; xx < tabTafa.Items.Count; xx++)
                {
                    string[] dados = { tabTafa.Items[xx].Data.ToString("MMMM"), tabTafa.Items[xx].Data.ToString("dd"),   
                    tabTafa.Items[xx].Apto.ToString("0_000"), tabTafa.Items[xx].Número.ToString() };
                    listaHisto.Rows.Add(dados);
                }
            }
        }

        private void vewBloco_Click(object sender, EventArgs e)
        {
            vewBloco.Items[antBloco].ImageIndex = 2;  
            qBlk = vewBloco.SelectedIndices[0];
            vewBloco.Items[qBlk].Selected = false;
            vewBloco.Items[qBlk].ImageIndex = 3;
            numBloco = Convert.ToInt32(vewBloco.Items[qBlk].Name); 
            antBloco = qBlk;
            vewApto.Enabled = true;
            vewApto.Focus(); 
        }

        private void vewApto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Space) vewApto_Click(null, null);
        }

        private void vewApto_Click(object sender, EventArgs e)
        {
            if (vewApto.SelectedIndices.Count == 0) return;
            vewApto.Items[antApto].ImageIndex = 0;
            qApt = vewApto.SelectedIndices[0];
            vewApto.Items[qApt].Selected = false;
            vewApto.Items[qApt].ImageIndex = 1;
            numApto = Convert.ToInt32(vewApto.Items[qApt].Name);
            antApto = qApt;
            Monta_Apto_OR_Cameira();
        }

        private void vewCameira_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Space) vewCameira_Click(null, null);
        }

        private void vewCameira_Click(object sender, EventArgs e)
        {
            if (vewCameira.SelectedIndices.Count == 0) return;
            vewCameira.Items[antCama].ImageIndex = 4;
            vewCameira.Items[antCama].BackColor = SystemColors.Control;  
            qCam = vewCameira.SelectedIndices[0];
            vewCameira.Items[qCam].Selected = false;
            vewCameira.Items[qCam].ImageIndex = 5;
            vewCameira.Items[qCam].BackColor = SystemColors.GradientActiveCaption;
            numCama = Convert.ToInt32(vewCameira.Items[qCam].Name);
            antCama = qCam;
            Monta_Apto_OR_Cameira();
        }

        private void Monta_Apto_OR_Cameira()
        {
            listaHisto.Rows.Clear();
            Operações tabOpera = new Operações(myDBase);
            tabOpera.Data = DateTime.Today.AddDays(-15);
            int dbRet;
            if (Ação == "porApto")
            {
                tabOpera.Local = (numBloco * 1000) + numApto;
                dbRet = tabOpera.ListaApto();
            }
            else
            {
                tabOpera.Cameira = numCama;
                dbRet = tabOpera.ListaCameira();
            }
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: HistoListGeral" + "\n" + tabOpera.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            DateTime antData = DateTime.Today;
            if (tabOpera.Items.Count > 0) antData = tabOpera.Items[0].Data;
            for (int xx = 0; xx < tabOpera.Items.Count; xx++)
            {
                Cameira estaCama = new Cameira(myDBase);
                estaCama.Código = tabOpera.Items[xx].Cameira_1;
                dbRet = estaCama.Obter();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: HistoListCama1" + "\n" + tabOpera.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                string dupla = estaCama.Nome;
                if (tabOpera.Items[xx].Cameira_2 != 0)
                {
                    estaCama.Código = tabOpera.Items[xx].Cameira_2;
                    dbRet = estaCama.Obter();
                    if (dbRet != 0)
                    {
                        MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                            + "referência: HistoListCama2" + "\n" + tabOpera.MsgErro,
                            "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    dupla = dupla + " / " + estaCama.Nome;
                }
                if (tabOpera.Items[xx].Data != antData)
                {
                    string[] traços = { "- - - - - - - - - -", "- -", "- - - - -", "- - - - - - - - -",
                        "- - - - - - - - - - - - - - - - - - - - - - - - - -" };
                    listaHisto.Rows.Add(traços);
                    antData = tabOpera.Items[xx].Data;
                }
                string qFez = tabAções[tabOpera.Items[xx].Ação];
                string[] dados = { tabOpera.Items [xx].Data.ToString("MMMM"), tabOpera.Items [xx].Data.ToString("dd"),   
                    tabOpera.Items [xx].Local.ToString("0_000"), qFez , dupla  };
                listaHisto.Rows.Add(dados);
                int estaRow = listaHisto.CurrentRow.Index; 
            }
        }

        private void listaHisto_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (Ação != "Pendentes") return;
            qRow = e.RowIndex;
            listaHisto_Selected();
        }

        private void listaHisto_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if ((Ação != "Pendentes") && (e.KeyData != Keys.Space)) return;
            qRow = (int) ((DataGridView)sender).CurrentRow.Index;
            listaHisto_Selected();
        }

        private void listaHisto_Selected()
        {
            DialogResult resp = MessageBox.Show("Você confirma a exclusão\nda programação para\no Apartamento "
                + listaHisto.Rows[qRow].Cells[2].Value.ToString() + "\nno dia "
                + listaHisto.Rows[qRow].Cells[1].Value.ToString() + " de "
                + listaHisto.Rows[qRow].Cells[0].Value.ToString() + " ?", "   Excluir programação", 
                MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (resp == DialogResult.No) return;
            Tarefa estaTafa = new Tarefa(myDBase);
            estaTafa.Número = Convert.ToInt32(listaHisto.Rows[qRow].Cells[3].Value.ToString());
            int dbRet = estaTafa.Delete();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: HistoExcluirOperação" + "\n" + estaTafa.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaHisto.Rows.RemoveAt(qRow);
        }
    }
}
